home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / Extras / MIDI / camd-37.1 / development / include / midi / mididefs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-15  |  9.3 KB  |  327 lines

  1. #ifndef MIDI_MIDIDEFS_H
  2. #define MIDI_MIDIDEFS_H
  3.  
  4. /************************************************************************
  5. *                 C. A. M. D.                *
  6. *************************************************************************
  7. * CMU Amiga Midi Driver - Carnegie Mellon University            *
  8. * 1988            - Commodore Amiga                *
  9. *                                    *
  10. * Design & Development    - Roger B. Dannenberg                *
  11. *            - Jean-Christophe Dhellemmes            *
  12. *            - Bill Barton                    *
  13. * Copyright 1989 Carnegie Mellon University                *
  14. *************************************************************************
  15. *
  16. * mididefs.h  - MIDI message definitions
  17. *
  18. * This information is derived from MIDI 1.0 Detailed Specification
  19. * v4.0 published by the Internation MIDI Association and is
  20. * current as of June, 1988.  The Sys/Ex ID numbers are hot off the
  21. * IMA's FAX machine as of Jan 8, 1990.
  22. *
  23. *************************************************************************
  24. * Date          | Change
  25. *------------------------------------------------------------------------
  26. * 22-Jul-1990 : Updated for new bank select controller # (BB)
  27. *  5-Nov-1988 : Created (BB)
  28. ************************************************************************/
  29.  
  30.  
  31. /***************************************************************
  32. *
  33. *   Status Bytes
  34. *
  35. ***************************************************************/
  36.  
  37.     /* Channel Voice Messages (1sssnnnn) (OR with channel number) */
  38. #define MS_NoteOff    0x80
  39. #define MS_NoteOn    0x90
  40. #define MS_PolyPress    0xA0
  41. #define MS_Ctrl     0xB0
  42. #define MS_Mode     0xB0
  43. #define MS_Prog     0xC0
  44. #define MS_ChanPress    0xD0
  45. #define MS_PitchBend    0xE0
  46.  
  47. #define MS_StatBits    0xF0
  48. #define MS_ChanBits    0x0F
  49.  
  50.     /* System Common Messages (11110sss) */
  51. #define MS_System    0xF0        /* min system status byte */
  52. #define MS_SysEx    0xF0
  53. #define MS_QtrFrame    0xF1
  54. #define MS_SongPos    0xF2
  55. #define MS_SongSelect    0xF3
  56. #define MS_TuneReq    0xF6
  57. #define MS_EOX        0xF7
  58.  
  59.     /* System Real Time Messages (11111sss) */
  60. #define MS_RealTime    0xF8        /* min real time status byte */
  61. #define MS_Clock    0xF8
  62. #define MS_Start    0xFA
  63. #define MS_Continue    0xFB
  64. #define MS_Stop     0xFC
  65. #define MS_ActvSense    0xFE
  66. #define MS_Reset    0xFF
  67.  
  68.  
  69. /***************************************************************
  70. *
  71. *   Standard Controllers
  72. *
  73. ***************************************************************/
  74.  
  75.     /* Continuous 14 bit - MSB: 0-1f, LSB: 20-3f */
  76. #define MC_Bank     0x00
  77. #define MC_ModWheel    0x01
  78. #define MC_Breath    0x02
  79. #define MC_Foot     0x04
  80. #define MC_PortaTime    0x05
  81. #define MC_DataEntry    0x06
  82. #define MC_Volume    0x07
  83. #define MC_Balance    0x08
  84. #define MC_Pan        0x0a
  85. #define MC_Expression    0x0b
  86. #define MC_General1    0x10
  87. #define MC_General2    0x11
  88. #define MC_General3    0x12
  89. #define MC_General4    0x13
  90.  
  91.     /* Continuous 7 bit (switches: 0-3f=off, 40-7f=on) */
  92. #define MC_Sustain    0x40
  93. #define MC_Porta    0x41
  94. #define MC_Sustenuto    0x42
  95. #define MC_SoftPedal    0x43
  96. #define MC_Hold2    0x45
  97. #define MC_General5    0x50
  98. #define MC_General6    0x51
  99. #define MC_General7    0x52
  100. #define MC_General8    0x53
  101. #define MC_ExtDepth    0x5b
  102. #define MC_TremoloDepth 0x5c
  103. #define MC_ChorusDepth    0x5d
  104. #define MC_CelesteDepth 0x5e
  105. #define MC_PhaserDepth    0x5f
  106.  
  107.     /* Parameters */
  108. #define MC_DataIncr    0x60
  109. #define MC_DataDecr    0x61
  110. #define MC_NRPNL    0x62
  111. #define MC_NRPNH    0x63
  112. #define MC_RPNL     0x64
  113. #define MC_RPNH     0x65
  114.  
  115. #define MC_Max        0x78    /* max controller value */
  116.  
  117.  
  118. /***************************************************************
  119. *
  120. *   Channel Modes
  121. *
  122. ***************************************************************/
  123.  
  124. #define MM_Min        0x79    /* min mode value */
  125.  
  126. #define MM_ResetCtrl    0x79
  127. #define MM_Local    0x7a
  128. #define MM_AllOff    0x7b
  129. #define MM_OmniOff    0x7c
  130. #define MM_OmniOn    0x7d
  131. #define MM_Mono     0x7e
  132. #define MM_Poly     0x7f
  133.  
  134.  
  135. /***************************************************************
  136. *
  137. *   Registered Parameter Numbers
  138. *
  139. *   These are 16 bit values that need to be separated into two
  140. *   bytes for use with the MC_RPNH & MC_RPNL messages using 8
  141. *   bit math (hi = MRP_ >> 8, lo = MRP_ & 0xff) as opposed to 7
  142. *   bit math.  This is done so that the defines match the
  143. *   numbers from the MMA.  See MIDI 1.0 Detailed Spec v4.0 pp
  144. *   12, 23 for more info.
  145. *
  146. ***************************************************************/
  147.  
  148. #define MRP_PBSens    0x0000
  149. #define MRP_FineTune    0x0001
  150. #define MRP_CourseTune    0x0002
  151.  
  152.  
  153. /***************************************************************
  154. *
  155. *   MTC Quarter Frame messages
  156. *
  157. *   Qtr Frame message is F1 0nnndddd where
  158. *
  159. *    nnn is a message type defined below
  160. *    dddd is 4 bit data nibble for those message types
  161. *
  162. *   Each pair of nibbles is combined by the receiver into a
  163. *   single byte. There are masks and type values defined for
  164. *   some of these data bytes below.
  165. *
  166. ***************************************************************/
  167.  
  168.     /* Message Types */
  169. #define MTCQ_FrameL    0x00
  170. #define MTCQ_FrameH    0x10
  171. #define MTCQ_SecL    0x20
  172. #define MTCQ_SecH    0x30
  173. #define MTCQ_MinL    0x40
  174. #define MTCQ_MinH    0x50
  175. #define MTCQ_HourL    0x60
  176. #define MTCQ_HourH    0x70    /* also contains time code type */
  177.  
  178.     /* Message Masks */
  179. #define MTCQ_TypeMask    0x70    /* mask for type bits in message */
  180. #define MTCQ_DataMask    0x0f    /* mask for data bits in message */
  181.  
  182.     /* Hour Byte */
  183. #define MTCH_TypeMask    0x60    /* mask for time code type */
  184. #define MTCH_HourMask    0x1f    /* hours mask (range 0-23) */
  185.  
  186.     /* Time code type values for hour byte */
  187. #define MTCT_24FPS    0x00
  188. #define MTCT_25FPS    0x20
  189. #define MTCT_30FPS_Drop 0x40
  190. #define MTCT_30FPS_NonDrop  0x60
  191.  
  192.  
  193. /***************************************************************
  194. *
  195. *   Sys/Ex ID numbers
  196. *
  197. *   Now includes 3 byte extension for the American Group.  This
  198. *   new format uses a 0x00 as the sys/ex id followed by two
  199. *   additional bytes that actually identify the manufacturer.
  200. *   These new extended id constants are 32 bit values with 24
  201. *   significant bits.
  202. *
  203. ***************************************************************/
  204.  
  205.     /* North American Group (1 byte) */
  206. #define MID_Sequential        0x01
  207. #define MID_IDP         0x02
  208. #define MID_OctavePlateau   0x03
  209. #define MID_Moog        0x04
  210. #define MID_Passport        0x05
  211. #define MID_Lexicon        0x06
  212. #define MID_Kurzweil        0x07
  213. #define MID_Fender        0x08
  214. #define MID_Gulbransen        0x09
  215. #define MID_AKG         0x0a
  216. #define MID_Voyce        0x0b
  217. #define MID_Waveframe        0x0c
  218. #define MID_ADA         0x0d
  219. #define MID_Garfield        0x0e
  220. #define MID_Ensoniq        0x0f
  221. #define MID_Oberheim        0x10
  222. #define MID_Apple        0x11
  223. #define MID_GreyMatter        0x12
  224. #define MID_PalmTree        0x14
  225. #define MID_JLCooper        0x15
  226. #define MID_Lowrey        0x16
  227. #define MID_AdamsSmith        0x17
  228. #define MID_Emu         0x18
  229. #define MID_Harmony        0x19
  230. #define MID_ART         0x1a
  231. #define MID_Baldwin        0x1b
  232. #define MID_Eventide        0x1c
  233. #define MID_Inventronics    0x1d
  234. #define MID_Clarity        0x1f
  235.  
  236.     /* North American Group (3 byte) */
  237. #define MID_XAmerica        0x00    /* North American 3 byte prefix */
  238.  
  239. #define MIDX_DigitalMusic   0x000007L
  240. #define MIDX_Iota        0x000008L
  241. #define MIDX_Artisyn        0x00000aL
  242. #define MIDX_IVL        0x00000bL
  243. #define MIDX_SouthernMusic  0x00000cL
  244. #define MIDX_LakeButler     0x00000dL
  245. #define MIDX_DOD        0x000010L
  246. #define MIDX_PerfectFret    0x000014L
  247. #define MIDX_KAT        0x000015L
  248. #define MIDX_Opcode        0x000016L
  249. #define MIDX_Rane        0x000017L
  250. #define MIDX_SpatialSound   0x000018L
  251. #define MIDX_KMX        0x000019L
  252. #define MIDX_Brenell        0x00001aL
  253. #define MIDX_Peavey        0x00001bL
  254. #define MIDX_360        0x00001cL
  255. #define MIDX_Axxes        0x000020L
  256. #define MIDX_CAE        0x000026L
  257. #define MIDX_Cannon        0x00002bL
  258. #define MIDX_BlueSkyLogic   0x00002eL
  259. #define MIDX_Voce        0x000031L
  260.  
  261.     /* European Group */
  262. #define MID_SIEL        0x21
  263. #define MID_Synthaxe        0x22
  264. #define MID_Hohner        0x24
  265. #define MID_Twister        0x25
  266. #define MID_Solton        0x26
  267. #define MID_Jellinghaus     0x27
  268. #define MID_Southworth        0x28
  269. #define MID_PPG         0x29
  270. #define MID_JEN         0x2a
  271. #define MID_SSL         0x2b
  272. #define MID_AudioVeritrieb  0x2c
  273. #define MID_Elka        0x2f
  274. #define MID_Dynacord        0x30
  275. #define MID_Clavia        0x33
  276. #define MID_Soundcraft        0x39
  277.  
  278.     /* Japanese Group */
  279. #define MID_Kawai        0x40
  280. #define MID_Roland        0x41
  281. #define MID_Korg        0x42
  282. #define MID_Yamaha        0x43
  283. #define MID_Casio        0x44
  284. #define MID_Kamiya        0x46
  285. #define MID_Akai        0x47
  286. #define MID_JapanVictor     0x48
  287. #define MID_Mesosha        0x49
  288.  
  289.     /* Universal ID Numbers */
  290. #define MID_UNC     0x7d
  291. #define MID_UNRT    0x7e
  292. #define MID_URT     0x7f
  293.  
  294.  
  295. /***************************************************************
  296. *
  297. *   Miscellaneous
  298. *
  299. ***************************************************************/
  300.  
  301. #define MiddleC     60    /* Middle C note value */
  302. #define DefaultVelocity 64    /* Default Note On or Off velocity */
  303. #define PitchBendCenter 0x2000    /* Pitch Bend center position as a 14 bit word */
  304. #define MClksPerQtr    24    /* MIDI clocks per qtr-note */
  305. #define MClksPerSP    6    /* MIDI clocks per song position index */
  306. #define MCCenter    64    /* Center value for controllers like Pan and Balance */
  307.  
  308.  
  309. /***************************************************************
  310. *
  311. *   Macros
  312. *
  313. ***************************************************************/
  314.  
  315.     /* pack high/low bytes of a word into midi format (7/14 bit math) */
  316. #define MIDIHiByte(word) ( (word) >> 7 & 0x7f )
  317. #define MIDILoByte(word) ( (word) & 0x7f )
  318.  
  319.     /* unpack 2 midi bytes into a word (7/14 bit math) */
  320. #define MIDIWord(hi,lo) ( ((hi) & 0x7f) << 7 | ((lo) & 0x7f) )
  321.  
  322.     /* make a 3 byte sys/ex id from single bytes (e.g. MakeMIDX(msg[1],msg[2],msg[3]) */
  323. #define MakeMIDX(id0,id1,id2) ((ULONG)(id0)<<16 | (id1)<<8 | (id2))
  324.  
  325.  
  326. #endif /* MIDI_MIDIDEFS_H */
  327.